package dto

import "encoding/json"

// GoodsDataDto 商品数据DTO
//
// @author liaochangyi
// @since 2025-01-25
type GoodsDataDto struct {
	CostPrice   *string           `json:"cost_price,omitempty"`   // 订单原价
	ReceiptId   *string           `json:"receipt_id,omitempty"`   // 商品小票ID
	GoodsDetail []*GoodsDetailDto `json:"goods_detail,omitempty"` // 单品列表
}

// NewGoodsDataDto 创建新的商品数据DTO实例
func NewGoodsDataDto() *GoodsDataDto {
	return &GoodsDataDto{
		GoodsDetail: make([]*GoodsDetailDto, 0),
	}
}

// SetCostPrice 设置订单原价
func (g *GoodsDataDto) SetCostPrice(costPrice string) *GoodsDataDto {
	g.CostPrice = &costPrice
	return g
}

// SetReceiptId 设置商品小票ID
func (g *GoodsDataDto) SetReceiptId(receiptId string) *GoodsDataDto {
	g.ReceiptId = &receiptId
	return g
}

// SetGoodsDetail 设置商品详情列表
func (g *GoodsDataDto) SetGoodsDetail(goodsDetail []*GoodsDetailDto) *GoodsDataDto {
	g.GoodsDetail = goodsDetail
	return g
}

// AddGoodsDetail 添加商品详情
func (g *GoodsDataDto) AddGoodsDetail(goodsDetail *GoodsDetailDto) *GoodsDataDto {
	if g.GoodsDetail == nil {
		g.GoodsDetail = make([]*GoodsDetailDto, 0)
	}
	g.GoodsDetail = append(g.GoodsDetail, goodsDetail)
	return g
}

// ToJSON 转换为JSON字符串
func (g *GoodsDataDto) ToJSON() (string, error) {
	data, err := json.Marshal(g)
	if err != nil {
		return "", err
	}
	return string(data), nil
}

// FromJSON 从JSON字符串创建实例
func (g *GoodsDataDto) FromJSON(jsonStr string) error {
	return json.Unmarshal([]byte(jsonStr), g)
}
